// 下面的注释格式叫： JSDoc
// https://www.shouce.ren/api/view/a/13232
/**
 * 将 十进制 的 rgb 颜色，转换成 16进制的颜色
 * @param {number} r 
 * @param {number} g 
 * @param {number} b 
 * 
 * @returns {string} 以字符串的实行返回 rgb 的十六进制颜色
 * 
 * @example rgb2Hex(3, 23, 199) -> '#0317c7' 
 */
function rgbToHex(r, g, b) {
  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
}

// 将上面的问题拆解成， 一个十进制数 0~255 如何转成十六进制
/**
 * 将十进制数 转成 十六进制
 * @param {number} num 输入的数为 0~255
 */
function toHex(num) {
  // 若 num 小于0 ，就返回 00；避免用户输入负数，css 不识别
  if (num < 0) {
    return `00`;
  }
  // 若 num 大于 255，就返回 ff，避免用户输入超大的数，css 不识别
  if (num > 255) {
    return 'ff';
  }
  // 若 num 小于 16，就将 16 进制返回值，增加 `0X`，避免 css 识别
  if (num <= 15) {
    return `0${num.toString(16)}`
  }
  return num.toString(16);
}

// *** 重要：
// DRY原则：Don't Repeat Yourself  -> 不要重复你自己的代码
  // 其意义是：但凡我们写代码的时候，发现了 代码有重复的地方，就要将 重复的代码 封装成 函数
